const mongoose = require('mongoose');
require('./src/models/User'); // 先加载User模型
const Message = require('./src/models/Message');

// 连接MongoDB数据库
mongoose.connect('mongodb://localhost:27017/litechat')
  .then(async () => {
    console.log('MongoDB 连接成功');
    
    try {
      console.log('开始检查重复消息...');
      
      // 获取所有消息
      const messages = await Message.find({}).sort({ createdAt: 1 });
      
      console.log(`找到总计 ${messages.length} 条消息记录`);
      
      // 用于去重的Map
      const uniqueMessages = new Map();
      const duplicateMessages = [];
      const uniqueMessagesArray = [];
      
      // 遍历消息，按照内容+发送者+接收者+时间(精确到分钟)进行分组
      messages.forEach(message => {
        const date = new Date(message.createdAt);
        const timeKey = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}-${date.getHours()}-${date.getMinutes()}`;
        const uniqueKey = `${message.content}_${message.sender}_${message.receiver}_${timeKey}`;
        
        // 如果这个键不存在，添加消息到唯一消息集
        if (!uniqueMessages.has(uniqueKey)) {
          uniqueMessages.set(uniqueKey, message);
          uniqueMessagesArray.push(message);
        } else {
          duplicateMessages.push(message);
        }
      });
      
      console.log(`检测到 ${duplicateMessages.length} 条重复消息`);
      
      if (duplicateMessages.length > 0) {
        console.log('重复消息示例:');
        
        // 显示前5条重复消息的示例
        const sampleSize = Math.min(5, duplicateMessages.length);
        for (let i = 0; i < sampleSize; i++) {
          const msg = duplicateMessages[i];
          console.log(`- "${msg.content}" 从 ${msg.sender} 发送给 ${msg.receiver} 在 ${msg.createdAt}`);
        }
        
        // 确认是否删除重复消息
        console.log('\n这些重复消息将被删除');
        
        // 删除重复消息
        let deletedCount = 0;
        for (const message of duplicateMessages) {
          await Message.findByIdAndDelete(message._id);
          deletedCount++;
          
          // 每删除10条消息输出一次进度
          if (deletedCount % 10 === 0) {
            console.log(`已删除 ${deletedCount}/${duplicateMessages.length} 条重复消息...`);
          }
        }
        
        console.log(`完成! 已删除 ${deletedCount} 条重复消息`);
        console.log(`数据库中现有 ${uniqueMessagesArray.length} 条唯一消息记录`);
      } else {
        console.log('数据库中没有检测到重复消息');
      }
    } catch (error) {
      console.error('清理过程中出错:', error);
    } finally {
      // 关闭数据库连接
      await mongoose.disconnect();
      console.log('数据库连接已关闭');
    }
  })
  .catch(err => {
    console.error('MongoDB 连接失败:', err);
  }); 